#include <stdio.h>
#include "data.h"

#define NAME_LEN  31
#define MAX_PARTS 100

//保存库存零件信息的结构
struct part {
	int number; //零件编号
	char name[NAME_LEN + 1]; //名称
	int on_hand;   //库存
};

static struct part inventory[MAX_PARTS];	//结构体数组保存库存零件信息
static int num_part = 0;	//当前库存零件数量符

void query_data(void) {
	printf("查询\n");
	printf("输入零件编号：");
	int a;
	scanf("%d",&a);
	for(int i=0; i<num_part; i++) {
		if(a==inventory[i].number) {
			printf("零件编号：%d\n零件名称：%s\n零件库存：%d\n",inventory[i].number,inventory[i].name,inventory[i].on_hand);
			return;
		}
	}
	printf("零件不存在\n");
}

void add_data(void) {
	puts("添加");
	int number;
	printf("输入零件编号：");
	scanf("%d", &number);
	for(int i = 0; i < num_part; i++)
		if (number == inventory[i].number) {
			printf("零件已存在\n");
			return;
		}
	inventory[num_part].number = number;
	printf("输入零件名称：");
	scanf ("%s", &inventory[num_part].name);
	printf("输入库存数：");
	scanf("%d", &inventory[num_part].on_hand);
	printf("添加成功\n");
	num_part++;
}

void update_data(void) {
	printf("修改\n输入零件编号：");
	int a;
	scanf("%d",&a);
	for(int i=0; i<num_part; i++) {
		if(a==inventory[i].number) {
			printf("输入零件名称：");
			scanf("%s",inventory[i].name);
			printf("输入零件库存：");
			scanf("%d",&inventory[i].on_hand);
			printf("零件  %d  已更新\n",a);
			return;
		}
	}
	printf("零件不存在\n");
}

void delete_data(void) {
	printf("删除\n输入零件编号：");
	int a;
	scanf("%d",&a);
	for(int i=0; i<num_part; i++) {
		if(a==inventory[i].number) {
			for(int j=i; j<num_part; j++) {
				inventory[j].number=inventory[j+1].number;
				inventory[j].on_hand=inventory[j+1].on_hand;
				strcpy(inventory[j].name,inventory[j+1].name);
			}
			printf("零件  %d  已删除\n",a);
			num_part--;
			return;
		}
	}
	printf("零件不存在\n");
}

void read_data(void) {
 	printf("读取\n");
 	printf("请输入文件名：");
 	char ming[256];
 	scanf("%s",ming);
 	FILE *fp = fopen(ming,"r");
 	if (fp ==NULL) {
  		perror(ming);
  		return;
 	}
 	int i = 0;
 	while ( fscanf(fp, "%d,%[^,],%d",
                			&inventory[i].number,
                			inventory[i].name,
                			&inventory[i].on_hand) == 3 )
  		i++;
 	fclose(fp);
 	num_part = i;

 	printf("读取 %d 记录\n", num_part);
}

void save_data(void) {
	printf("保存\n");
 	char ming[256];
 	FILE *fp;
 	printf("请输入文件名：");
 	scanf("%s",ming);
 	if((fp=fopen(ming,"w"))==NULL) {
  		printf("File open error!\n");
  		exit(0);
 	}
 	for(int i=0; i<num_part; i++) {
  		fprintf(fp,"%d,%s,%d\n",inventory[i].number,inventory[i].name,inventory[i].on_hand);
 	}
 	if(fclose(fp)) {
  		printf("Can not close the file!\n");
  		exit(0);
 	}
 	printf("保存 %d 记录",num_part);
}

void print_data(void) {
	printf("打印\n");
	for(int i=0; i<67; i++)
		printf("_");
	printf("\n");
	printf("| NUMBER     |           NAME                        | ON HAND    |\n");
	for(int i=0; i<67; i++)
		printf("~");
	printf("\n");
	for(int i=0; i<num_part; i++) {
		printf("|%12d|",inventory[i].number);
		int lon=strlen(inventory[i].name);
		printf("%s",inventory[i].name);
		for(int k=0; k<39-lon; k++)
			printf(" ");
		printf("|%12d|\n",inventory[i].on_hand);
	}
	for(int i=0; i<67; i++)
		printf("~");
	printf("\n");
}

void sort_data(void) {
	printf("排序\n");
}

void make_chart(void) {
	printf("图表\n");
}
